package org.jsola.hr.service.impl;

import org.jsola.common.BeanKit;
import org.jsola.hr.dto.SyncSocUniversalDTO;
import org.jsola.hr.dto.SyncSocWebSiteDTO;
import org.jsola.hr.service.ISyncSocInterface;
import org.jsola.hr.service.ISyncSocWebSiteService;
import org.jsola.user.core.TokenUser;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;


/**
 * @author lyh
 */
@Service("hrSyncSocWebSiteServiceImpl")
public class SyncSocWebSiteServiceImpl implements ISyncSocWebSiteService {


    @Override
    public <T> List<T> incrementSocEmp(SyncSocWebSiteDTO syncSocWebSiteDTO, TokenUser tokenUser){
        ISyncSocInterface syncSocInterface = (ISyncSocInterface) BeanKit.getBean(syncSocWebSiteDTO.getSyncServiceBeanName());
        return syncSocInterface.incrementSocEmp(syncSocWebSiteDTO,tokenUser);
    }

    @Override
    public <T> List<T> decreaseSocEmp(SyncSocWebSiteDTO syncSocWebSiteDTO, TokenUser tokenUser){
        ISyncSocInterface syncSocInterface = (ISyncSocInterface) BeanKit.getBean(syncSocWebSiteDTO.getSyncServiceBeanName());
        return syncSocInterface.decreaseSocEmp(syncSocWebSiteDTO,tokenUser);
    }

    @Override
    public List<SyncSocUniversalDTO> batchSync(SyncSocWebSiteDTO syncSocWebSiteDTO, TokenUser tokenUser){
        ISyncSocInterface syncSocInterface = (ISyncSocInterface) BeanKit.getBean(syncSocWebSiteDTO.getSyncServiceBeanName());
        List<SyncSocUniversalDTO> syncSoc = new ArrayList<>();
        List<SyncSocUniversalDTO> syncMe = new ArrayList<>();
        List<SyncSocUniversalDTO> syncPf = new ArrayList<>();
        if(syncSocWebSiteDTO.getSocIsTrue()){
            syncSoc = syncSocInterface.batchSyncSocInfo(syncSocWebSiteDTO, tokenUser);
        }
        if(syncSocWebSiteDTO.getMeIsTrue()){
            syncMe = syncSocInterface.batchSyncMeInfo(syncSocWebSiteDTO, tokenUser);
        }
        if(syncSocWebSiteDTO.getPfIsTrue()){
            syncPf = syncSocInterface.batchSyncPfInfo(syncSocWebSiteDTO, tokenUser);
        }
        syncSoc.addAll(syncMe);
        syncSoc.addAll(syncPf);
        return syncSoc;
    }
}
